const bodyParser = require("body-parser");
const path = require("path");
const mongoose = require("mongoose");
const cors = require("cors");
const multer = require('multer');
const express = require("express");
const app = express();
var http = require("http").Server(app);
var io = require("socket.io")(http, { cors: { origin: "*" } });
// var io = require('socket.io')(http, { cors: true });
// const { chatRoomMsg } = require("./config/contsten");
app.use(cors()); //解决跨域
//静态资源 请求托管
app.use(express.static(__dirname + "/public"));

app.use(bodyParser.urlencoded({ extended: true })); //这句话会自动在接口的请求头中添加一个body属性 保存post传过来的信息
//  app.use(cookieParser());
app.use(bodyParser.json());
// 先将路由根据其功能进行划分 分别独立成一个文件 最后在app这个主文件中调用
app.use("/user", require("./router/user"));
app.use("/admin", require("./router/admin"));
app.use("/blog", require("./router/blog"));
//--------------------------------------聊天室代码------------------------------
//所有消息
let chatRoomMsg = [];

// 图片上传配置
var storage = multer.diskStorage({
  // 图片保存位置
  destination: function (req, file, cb) {
    cb(null, 'public/uploads')
  },
  // 图片名称
  filename: function (req, file, cb) {
    cb(null, file.originalname)
  }
})
const upload = multer({ storage: storage });

// 图片上传
app.post('/upload', upload.single('file'), async (req, res) => {
  const file = req.file;
  if(file){
    file.filename = `http://localhost:8848/uploads/${file.filename}`
    res.json({
      imgPath : file.filename,
      msg:'上传成功',
      status:0
    });
  }else{
    res.json({
      msg:'上传失败',
      status:1
    });
  }
});

app.get('/chatRoom',(req,res) => {
  // 返回已有的聊天记录
  res.json({data:chatRoomMsg});
  // res.sendFile(__dirname + '/index.html');
})
// 当前在线的用户
var onlineUsers = [];
// 在当前聊天室的人
var chatRoomUser = [];
app.all("*", function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "http://localhost:8080");
  res.header("Access-Control-Allow-Credentials", "true");
  res.header("Access-Control-Allow-Headers", "Content-Type");
  res.header("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS");
  next();
});

io.sockets.on("connection", function (socket) {
  console.log("用户进来了:", socket.id);

  let ID = socket.id;
  //让刚进来的用户知道之前的聊天记录 和 所有在线用户
  socket.emit("allinfo", chatRoomMsg);
  io.emit("allUser", chatRoomUser);

  // 有用户进入到这个房间
  socket.on("join", function (userName) {
    let user = userName;
    onlineUsers[user] = socket; //把socket存到全局数组里面去
    // console.log(onlineUsers);
  });

  // 私聊
  socket.on("sendOnlyPeople", function (from, to, msg) {
    // var target = onlineUsers[to];
    // if (target) {
      // console.log("emitting private message by ", from, " say to ", to, msg);
      msg.from = from
      socket.to(to).emit('receiveMsg', msg)
    // }
  });
  // 聊天室 聊天消息推送
  socket.on("chatRoom", function (msg) {
    chatRoomMsg.push({
      name: msg.name, // 谁说的话
      content: msg.content, // 说的什么
      time: Date.now(), // 什么时间说的
      img: msg.img,
      tag: msg.tag,
      id: msg.id,
      userid : msg.userid
    });

    
    io.emit("sevchatRoom", msg);
  });

  // 谁离开了
  socket.on("disconnect", () => {
    io.emit('quit', socket.id)
  });

});

// -------------------------------------聊天室------------------------------------------
//链接数据库
//第一个参数是 协议：链接地址/端口/数据库名
//第二个参数是 回调函数
mongoose.connect('mongodb://localhost:27017/community',{ useNewUrlParser: true,useUnifiedTopology: true },function(err){
// 链接数据库
// 第一个参数是 协议：链接地址/端口/数据库名
// 第二个参数是 回调函数

    if (err) {
      console.log("数据库连接失败");
    } else {
      console.log("数据库连接成功");
      // 开启服务器  最好只有在数据库连接成功时才启动服务器
      http.listen(8848, () => {
        console.log("servering....");
      });
    }
  }
);
// io.listen(8847)
module.exports = {
  chatRoomMsg
}